package br.com.brasileirao.mb;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import javax.faces.model.SelectItem;

import br.com.brasileirao.factory.HibernateDAOFactory;
import br.com.brasileirao.modelo.Cidade;
import br.com.brasileirao.modelo.Clube;
import br.com.brasileirao.modelo.Endereco;
import br.com.brasileirao.modelo.UF;

public class ClubeMB extends GenericMB<Clube> implements Serializable{
	
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private Clube clube;
	private UF uf;
	private List<SelectItem> listasUF;
	private List<SelectItem> listasCidades;
	private Cidade cidadeSelecionada;
	private Endereco endereco;
	private String codCidadeSelecionada;
	
	public Clube getClube() {
		if (clube == null) {
			endereco = new Endereco();
			clube = new Clube();
			clube.setEndereco(endereco);
		}
		return clube;
	}

	public void setClube(Clube clube) {
		this.clube = clube;
	}
	
	public UF getUf() {
		return uf;
	}

	public void setUf(UF uf) {
		this.uf = uf;
	}
	
	public List<SelectItem> getListasUF() {
		if (listasUF == null) {
			listasUF = new ArrayList<SelectItem>();
			for (UF uf : UF.values()){
				SelectItem selectItem = new SelectItem();
				selectItem.setValue(uf);
				selectItem.setLabel(uf.name());
				selectItem.setDescription(uf.name());
				listasUF.add(selectItem);
			}
			
		}
		return listasUF;
	}

	public void setListasUF(List<SelectItem> listasUF) {
		this.listasUF = listasUF;
	}

	public List<SelectItem> getListasCidades() {
		listasCidades = new ArrayList<SelectItem>();
		if (uf!= null) {
			List<Cidade> cidades = HibernateDAOFactory.getCidadeHibernateDao().cidadePorUF(String.valueOf(uf.getCodigo()));
			for (Cidade cidade : cidades) {
				SelectItem selectItem = new SelectItem();
				selectItem.setValue(cidade.getCodigoMunicipio());
				selectItem.setLabel(cidade.getNomeMunicipio());
				selectItem.setDescription(cidade.getNomeMunicipio());
				listasCidades.add(selectItem);
			}
			return listasCidades;
		}
		return Collections.EMPTY_LIST;
	}

	public Cidade getCidadeSelecionada() {
		return cidadeSelecionada;
	}

	public void setCidadeSelecionada(Cidade cidadeSelecionada) {
		this.cidadeSelecionada = cidadeSelecionada;
	}

	public Endereco getEndereco() {
		return endereco;
	}

	public void setEndereco(Endereco endereco) {
		this.endereco = endereco;
	}

	
	public String salvar(){
		System.out.println("PASSEI POR AQUI!!!");
		getClube().getEndereco().setCidade(cidadeSelecionada);
		HibernateDAOFactory.getClubeHibernateDao().save(getClube());
		return null;
	}
	
	public void save(ActionEvent actionEvent) {
		System.out.println("PASSEI POR AQUI!!!");
		HibernateDAOFactory.getCidadeHibernateDao().findById(getCodCidadeSelecionada(), false);
		getClube().getEndereco().setCidade(cidadeSelecionada);
		HibernateDAOFactory.getClubeHibernateDao().save(getClube());
		FacesMessage facesMessage = new FacesMessage(FacesMessage.SEVERITY_INFO, "Info", "Filme salvo com sucesso!");
		FacesContext.getCurrentInstance().addMessage(null, facesMessage);
	}

	public String getCodCidadeSelecionada() {
		return codCidadeSelecionada;
	}

	public void setCodCidadeSelecionada(String codCidadeSelecionada) {
		this.codCidadeSelecionada = codCidadeSelecionada;
	}
	
	
}
